package com.iambookmaster.client.common;
import java.io.IOException;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppLocale;
public class FileExchangeClient {
private static AppConstants appConstants = AppLocale.getAppConstants();
private native String selectFileApplet(JavaScriptObject app,boolean save,String title)/*-{
return app.selectfile(title,save);
}-*/;
public String selectFile(String title,boolean save){
if (checkApplet()==false) {
return null;
}
JavaScriptObject app = getApplet();
String res = selectFileApplet(app,false,title);
if (res.equals("OK")) {
return getData(app);
} else {
return null;
}
}
private native String loadFileApplet(String file,JavaScriptObject app)/*-{
return app.readfile(file);
}-*/;
public String loadFile(String title) {
try {
if (checkApplet()==false) {
return null;
}
JavaScriptObject app = getApplet();
String res = selectFileApplet(app,false,title);
if (res.equals("OK")) {
String file = getData(app);
res = loadFileApplet(file, app);
if (res.equals("OK")) {
return getData(app);
}
} else if (res != null){
Window.alert(res);
}
} catch (Exception e) {
Window.alert(e.getMessage());
}
return null;
}
public static boolean checkApplet() {
if (_checkApplet()==false) {
return false;
}
return true;
}
private static native boolean _checkApplet()/*-{
var app = $doc.applets["fileExchangeApplet"];
try {
app.getBuffer();
return true;
} catch (e) {
return false;
}
}-*/;
private static native JavaScriptObject getApplet()/*-{
return $doc.applets["fileExchangeApplet"];
}-*/;
private native String getData(JavaScriptObject app)/*-{
return app.getBuffer();
}-*/;
private native String getData64(JavaScriptObject app)/*-{
return app.getBuffer64();
}-*/;
private native void setData(JavaScriptObject app,String data)/*-{
return app.setBuffer(data);
}-*/;
/**
* Write file for non-XUL browsers
* @param data
* @return
*/
public void saveFile(String data,String title) {
try {
if (checkApplet()==false) {
return;
}
JavaScriptObject app = getApplet();
String file = selectFileApplet(app,true,title);
if (file.equals("OK")) {
file = getData(app);
setData(app,data);
saveFileApplet(app,file);
} else if (file != null){
Window.alert(file);
}
} catch (Exception e) {
Window.alert(e.getMessage());
}
}
private native String saveFileApplet(JavaScriptObject app,String file)/*-{
return app.writefile(file);
}-*/;
public static void init(boolean skipJava) {
JavaScriptObject obj = getJavaDeployer();
if (obj==null || isJREAvailable(obj) || skipJava) {
//ok
} else if (Window.confirm(appConstants.installJRE())) {
//install
installJRE(obj);
}
}
private native static void installJRE(JavaScriptObject deployJava) /*-{
try {
deployJava.installLatestJRE();
} catch (e) {
}
}-*/;
private native static boolean isJREAvailable(JavaScriptObject deployJava) /*-{
try {
return deployJava.getJREs().length>0;
} catch (e) {
return false;
}
}-*/;
private native static JavaScriptObject getJavaDeployer() /*-{
return $wnd.deployJava;
}-*/;
public String loadFileByPath(String name) {
if (checkApplet()==false) {
return null;
}
JavaScriptObject app = getApplet();
String res = loadFileApplet(name,app);
if (res.equals("OK")) {
return Base64Coder.decodeString(getData64(app));
} else {
return null;
}
}
private native String _selectFolder(JavaScriptObject app,String title,String button,String defFolder)/*-{
return app.selectFolder(title,button,defFolder);
}-*/;
public String selectFolder(String title,String button) {
if (checkApplet()==false) {
return null;
}
JavaScriptObject app = getApplet();
String res = _selectFolder(app,title,button,null);
if (res.equals("OK")) {
return getData(app);
} else {
return null;
}
}
public String[] selectFilesByExtention(String path, String extension) {
if (checkApplet()==false) {
return null;
}
JavaScriptObject app = getApplet();
String res = _selectFilesByExtention(app,path,extension);
if (res.equals("OK")) {
res = getData(app);
if (res.length()==0) {
return new String[0];
} else {
return res.split("\n");
}
} else {
return null;
}
}
private native String _selectFilesByExtention(JavaScriptObject app, String path, String extension)/*-{
return app.selectFilesByExtention(path,extension);
}-*/;
public void writeFile(String fileName, String data) throws IOException {
if (checkApplet()==false) {
throw new IOException("No Applet");
}
JavaScriptObject app = getApplet();
setData(app, data);
String res = saveFileApplet(app,fileName);
if (res.equals("OK")==false) {
throw new IOException("Ошибка записи "+res);
}
}
}